Integrated interleaved codes

ABSTRACT

Integrated interleaved encoding is performed by obtaining a first piece of input data and a second piece of input data. The first piece of input data is systematically encoded using a first generator polynomial to obtain a first codeword. A second codeword is generated based at least in part on the second piece of input data and the first codeword. This includes by systematically encoding information based at least in part on the second piece of input data and the first codeword using a second generator polynomial. The first codeword and the second codeword are output.

CROSS REFERENCE TO OTHER APPLICATIONS

This application claims priority to U.S. Provisional Patent Application No. 61/001,507 entitled A NEW ENCODING METHOD FOR INTEGRATED-INTERLEAVED CODES filed Oct. 31, 2007 which is incorporated herein by reference for all purposes.

BACKGROUND OF THE INVENTION

With error correcting codes, it is possible to detect and correct for certain numbers and/or types of errors in data. Integrated interleaved codes are one type of error correcting code. Integrated interleaved codes are systematic codes (i.e., the input data is included or otherwise embedded in the encoded data) and generate multiple codewords, each of which is associated with a particular level.

BRIEF DESCRIPTION OF THE DRAWINGS

Various embodiments of the invention are disclosed in the following detailed description and the accompanying drawings.

FIG. 1 is a diagram showing two example applications that use integrated interleaved coding.

FIG. 2 is a diagram showing a mapping described by Cox et al. (hereinafter referred to as Cox) for the case where ν=1 and m=4.

FIG. 3A shows an embodiment of a two level integrated interleaved encoder in which m=4 and ν=1.

FIG. 3B is flowchart illustrating an embodiment of a process for two level integrated interleaving encoding where m=4 and ν=1.

FIG. 4 shows an embodiment of sectors associated with a disk drive system.

FIG. 5 is a flowchart illustrating an embodiment for a two level integrated interleaved code where ν>1.

FIG. 6A shows an embodiment of a two level integrated interleaved encoder where m=4 and ν=2.

FIG. 6B is a flowchart illustrating an embodiment of a process for a two level integrated interleaved encoder where m=4 and ν=2.

FIG. 7 is a diagram showing two embodiments of three level integrated interleaved encoding.

DETAILED DESCRIPTION

The invention can be implemented in numerous ways, including as a process; an apparatus; a system; a composition of matter; a computer program product embodied on a computer readable storage medium; and/or a processor, such as a processor configured to execute instructions stored on and/or provided by a memory coupled to the processor. In this specification, these implementations, or any other form that the invention may take, may be referred to as techniques. In general, the order of the steps of disclosed processes may be altered within the scope of the invention. Unless stated otherwise, a component such as a processor or a memory described as being configured to perform a task may be implemented as a general component that is temporarily configured to perform the task at a given time or a specific component that is manufactured to perform the task. As used herein, the term ‘processor’ refers to one or more devices, circuits, and/or processing cores configured to process data, such as computer program instructions.

A detailed description of one or more embodiments of the invention is provided below along with accompanying figures that illustrate the principles of the invention. The invention is described in connection with such embodiments, but the invention is not limited to any embodiment. The scope of the invention is limited only by the claims and the invention encompasses numerous alternatives, modifications and equivalents. Numerous specific details are set forth in the following description in order to provide a thorough understanding of the invention. These details are provided for the purpose of example and the invention may be practiced according to the claims without some or all of these specific details. For the purpose of clarity, technical material that is known in the technical fields related to the invention has not been described in detail so that the invention is not unnecessarily obscured.

FIG. 1 is a diagram showing two example applications that use integrated interleaved coding. An integrated interleaved code is an error correcting code, meaning that errors can be identified and corrected so long as the errors (e.g., the number of errors or the characteristics of the errors) fall within the correction capabilities of the particular code used. In the top example, transmitter 104 includes integrated interleaved encoder 100. Data is encoded using an integrated interleaved code and any other processing is applied as appropriate. The processed data is then transmitted over a wireless medium. Receiver 106 receives a signal and processes it, including by decoding the signal using integrated interleaved decoder 102. Typically, a wireless medium is noisy and the signal received by receiver 106 typically includes noise (also referred to as errors).

In the other example shown, integrated interleaved encoding is used in a disk drive system. Integrated interleaved encoder 100 is part of write logic 108 and integrated interleaved decoder 102 is part of read logic 110. Write logic 108 and read logic 110 are in turn part of controller 112. Controller 112 writes information to disk storage system 114 and reads it back when the stored information is desired. For example, disk storage system 114 may include one or more disks on which data is stored magnetically. Prior to storing data in disk storage system 114, data is encoded using integrated interleaved encoder 100. When data is desired, it is read back from disk storage system 114 and decoded using integrated interleaved decoder 102. Typically, a signal read back from a disk storage system has noise or errors in it and using an integrated interleaved code permits read-back errors to be corrected.

In some cases, an integrated interleaved code is used to compensate for format inefficiency (e.g., due to a short block length, to reduce hardware costs in designing codes of a relatively long block length, etc.). In some other embodiments, an integrated interleaved code is used in some other application besides the examples shown herein.

What is disclosed herein is a particular mapping or coding associated with integrated interleaved coding. In some embodiments, a second level has a single component codeword and in other embodiments the second level has two or more codewords. Some examples are described in further detail below. Compared to some other techniques, fewer and/or simpler operations are performed (e.g., only addition as opposed to addition and subtraction, only one arithmetic operation as opposed to two arithmetic operations, etc.), corresponding to less hardware and/or shorter latency.

The general two-level integrated interleaved coding scheme of Hassner et al. is first described. Let {C_(i)}_(i=1) ² be (N,K_(i),d_(i)) over the Galois field GF(q) such that C₂∈C₁ and subsequently d₂≧d₁. That is, there are two codes C₁ and C₂ where code C₂ is (strictly) stronger than C₁ and correspondingly the minimum distance of code C₂ is greater than or equal to C₁. For a three level integrated interleaved coding scheme, three codes are used where C₃⊂C₂⊂C₁ and d₃≧d₂≧d₁. Integrated interleaved encoding can be expanded any number of levels.

R_(i)

=N−K_(i) and α is a primitive element of GF(q). For purposes of explanation, cyclic component codes (which are shortened in some embodiments) are described herein where C_(i) is associated with a generator polynomial g_(i)(x). As used herein, a codeword vector c and its corresponding polynomial c(x) are interchangeable. A two-level integrated interleaved code is defined as follows:

$\begin{matrix} {{C\overset{\Delta}{=}\left\{ {{c = {\left\lbrack {c_{0},c_{1},c_{2},\ldots\mspace{14mu},c_{m - 1}} \right\rbrack^{T}:{c_{i} \in C_{i}}}},{{\sum\limits_{i = 0}^{m - 1}{\alpha^{bi}c_{i}}} \in C_{2}},{b = 0},1,2,\ldots\mspace{14mu},{v - 1}} \right\}},} & (1) \end{matrix}$ where ν<m≦q−1.

The code C is a linear code over GF(q) of length mN, dimension (m−ν)K₁+νK₂, and a minimum distance of min{(ν+1)d₁,d₂}

FIG. 2 is a diagram showing a mapping described by Cox et al. (hereinafter referred to as Cox) for the case where ν=1 and m=4. In FIG. 2, m=4 and ν=1, but the equations associated with Cox described below are for the case where ν=1 (i.e., m is not a particular value in the equations). g₁(x) and g₂(x) are the generator polynomials of C₁ and C₂, respectively. α₀(x), α₁(x), . . . , α_(m−1)(x) are the data polynomials (i.e., input data or data prior to encoding). First, x^(R) ² ^(−R) ¹ α₁(x), x^(R) ² ^(−R) ¹ α₂(x), . . . , x^(R) ² ^(−R) ¹ α_(m−1)(x), are systematically encoded with respect to g₁(x) as follows: c _(i)(x)=ENC _(g1(x))(x^(R) ² ^(−R) ¹ α_(i)(x))=x ^(R) ² α_(i)(x)+r _(i)(x), i=1,2, . . . , m−1.  (2)

In Equation 2, ENC_(g(x)) denotes the systematic encoding with respect to the generator polynomial, g(x). In systematic encoding, the input data is embedded in the encoded data (i.e., codeword) that is output. In some cases, input data occupies the beginning portion of the codeword (e.g., <codeword>=<input data><redundant data>). R₁ and R₂ are the number of redundant bits, bytes, or symbols added by systematically encoding using generator polynomials g₁(x) and g₂(x), respectively.

Returning to Equation 2, c_(i)(x) is the encoded data that is output where i ranges from 1 to m−1, inclusive. For example, in FIG. 2, integrated interleaved encoder 200 includes systematic encoders 202 a-202 c which are configured to respectively input and systematically encode input data α₁(x), α₂(x), and α₃(x) using g₁(x) (as described by Equation 2). Codewords c₁(x), c₂(x), and c₃(x) are correspondingly output by systematic encoders 202 a-202 c.

To obtain the remaining codewords, Σ_(i=0) ^(m−1)α_(i)(x) is systematically encoded with respect to g₂(x)

$\begin{matrix} {{\overset{\_}{c}(x)} = {{{ENC}_{g\; 2{(x)}}\left( {\sum\limits_{i = 0}^{m - 1}{a_{i}(x)}} \right)} = {{x^{R_{2}}{\sum\limits_{i = 0}^{m - 1}{a_{i}(x)}}} + {s(x)}}}} & (3) \end{matrix}$ c(x) is an intermediate term and is not output by an integrated interleaved encoder. Returning back to the example of FIG. 2, input data α₀(x) thru α₃(x) (inclusive) are input to adder 204 which outputs a sum (i.e., Σ_(i=0) ^(m−1)α_(i)(x)). The sum is input to systematic encoder 206 which systematically encodes the sum using g₂(x) and outputs the intermediate term c(x) (described by Equation 3).

To obtain the codeword that is actually output according to Cox's technique, the following equation is used:

$\begin{matrix} {{c_{0}^{*}(x)} = {{x^{R_{2}}{a_{0}(x)}} + {s(x)} - {\sum\limits_{i = 1}^{m - 1}{r_{i}(x)}}}} & (4) \end{matrix}$ In Equation 4, c*₀∈C₁ and c*₀+Σ_(i=1) ^(m−1)c_(i)= c∈C₂. Note that R₂−R₁ padded zeros can be removed in the transmission of each component codeword c_(i), i=1, 2, . . . , m−1, as it is known to the decoder.

Returning to FIG. 2, input data α₀(x) is passed to one input of multiplexer 210. The other input of multiplexer 210 is coupled to the output of adder 208. Adder 208 receives as its inputs the redundant data s(x) output by systematic encoder 206 and the inverted or negative redundant data r₁(x), r₂(x), and r₃(x) that are output by systematic encoders 202 a-202 c, respectively. The select signal of multiplexer 210 (not shown) is configured to select the appropriate input at the appropriate time. First, the select signal is set so that the input data α₀(x) is passed through to the output. In Equation 4, this corresponds to the term x^(R) ² α₀(x). The select signal then switches to the other input and the output of adder 208 is output. This corresponds to the term s(x)−Σ_(i=1) ³r_(i)(x) in Equation 4 when m=4.

A new mapping for integrated interleaved encoding is described herein. The following figures show some embodiments for certain values of m and/or ν. Although some of the equations and figures described below are for the two level case, the techniques described herein can be applied to any number of levels.

FIG. 3A shows an embodiment of a two level integrated interleaved encoder in which m=4 and ν=1. In this embodiment (and other embodiments) g₁(x) and g₂(x) are the generator polynomials of C₁ and C₂, respectively. The data polynomials (i.e., input data or data prior to encoding) are α₀(x), α₁(x), . . . , α_(m−1)(x). First, the input data α₁(x), α₂(x), . . . , α_(m−1)(x) is systematically encoded with respect to g₁(x): c _(i)(x)=ENC _(g1(x))(α_(i)(x))=x ^(R) ¹ α_(i)(x)+r _(i)(x), i=1,2, . . . , m−1.  (5) As used herein, these codewords are referred to as first level codewords and do not include an asterisk (i.e., “*”).

In the example of FIG. 3A, integrated interleaved encoder 300 includes systematic encoders 302 a-302 c, each of which is configured to receive input data α₁(x), α₂(x), and α₃(x), respectively, and systematically encode it with g₁(x). The outputs of systematic encoders 302 a-302 c are codewords c₁(x), c₂(x), and c₃(x), respectively.

Then, α₀(x)+Σ_(i=1) ^(m−1)c_(i)(x) is systematically encoded with respect to g₂(x) to obtain the following intermediate value:

$\begin{matrix} {{\overset{\_}{c}(x)} = {{{ENC}_{g\; 2{(x)}}\left( {{a_{0}(x)} + {\sum\limits_{i = 1}^{m - 1}{c_{i}(x)}}} \right)} = {{x^{R_{2}}\left( {{a_{0}(x)} + {\sum\limits_{i = 1}^{m - 1}{c_{i}(x)}}} \right)} + {{s(x)}.}}}} & (6) \end{matrix}$

Referring to the example of FIG. 3A, adder 304 is configured to receive codewords c₁(x), c₂(x), and c₃(x) output by systematic encoders 302 a-302 c, respectively, as well as input data α₀(x). Note that unlike integrated interleaved encoder 200 of FIG. 2, an entire piece of encoded data is used in the summation, not just the redundant data portion. The output of adder 304 is passed to systematic encoder 306 which performs systematic encoding using g₂(x).

To obtain the remaining codeword, the following equation is used: c* ₀(x)=x ^(R) ² α₀(x)+s(x)  (7) The codeword c*₀(x) is referred to as a second level codeword and indicated by the asterisk. In this particular example (i.e., ν=1) the second level has a single component codeword. In cases where ν>1, the second level (or other level) has a plurality of component codewords. Some examples are described in further detail below. In Equation 7, it can be observed that c*₀∈C₁ and c*₀(x)+x^(R) ² Σ_(i=1) ^(m−1)c_(i)(x)= c(x) is a codeword polynomial in C₂.

Returning to FIG. 3A, multiplexer 308 is configured to receive as an input the input data α₀(x). Initially, the select signal of multiplexer 308 (not shown) is configured to select this input since the codeword c*₀(x) (at least in this example) has the input data (i.e., α₀(x)) as its beginning portion. In Equation 7, this corresponds to the term x^(R) ² α₀(x). The other input of multiplexer 308 is coupled to the output of systematic encoder 306. The select signal (not shown) of multiplexer 308 switches over and selects the redundant data output by systematic encoder 306; this corresponds to the term s(x) in Equation 7.

Integrated interleaved encoder 300 in some applications is more desirable than integrated interleaved encoder 200 in FIG. 2. (Note that given the same input data and the same generator polynomials, integrated interleaved encoders 200 and 300 will output different codewords but the strengths are the same since the codebook is the same.) One aspect when comparing the two integrated interleaved encoders is the number of adders. Integrated interleaved encoder 200 has two adders whereas integrated interleaved encoder 300 has only one adder. Also, the type of (e.g., arithmetic) operations performed is different. Adder 208 is actually performing subtraction whereas adder 304 performs addition. In some embodiments, subtraction is more computationally difficult and/or has a longer latency compared to addition when implemented in hardware.

FIG. 3B is flowchart illustrating an embodiment of a process for two level integrated interleaving encoding where m=4 and ν=1. Flowchart 350 corresponds to system 300 of FIG. 3A. At 352, input data α₀(x), α₁(x), α₂(x), and α₃(x) are obtained. First level codewords c₁(x), c₂(x), and c₃(x) are generated by performing systematic encoding using g₁(x) on input data α₁(x), α₂(x), and α₃(x), respectively, at 354. At 356, first level codewords c₁(x) , c₂(x), and c₃(x) and input data α₀(x) are added to obtain a sum. The sum is systematically encoded using g₂(x) to obtain redundant data s(x) at 358. Input data α₀(x) and redundant data s(x) are used to generate second level codeword c*₀(x) at 360. At 362, first level codewords c₁(x), c₂(x), and c₃(x) and second level codeword c*₀(x) are output.

FIG. 4 shows an embodiment of sectors associated with a disk drive system. In some embodiments, integrated interleaved encoded data (e.g., output by encoder 300 of FIG. 3A) is stored in disk drive system 400. Disk drive system 400 includes disk 402. Disk 402 includes a plurality of concentric tracks, one of which is shown (i.e., track 404). Arm 406 writes data to and reads data from disk 402. Referring back to the example of FIG. 1, the read/write signal may be passed between arm 406 and controller 112. The position of arm 406 may also be controlled by controller 112.

Track 404 includes a plurality of sectors, four of which are shown. In some embodiments, integrated interleaved encoded data is stored in a sector. For example, sectors 408 a-408 d may store c₁(x), c₂(x), c₃(x), and c*₀(x), respectively. In some embodiments, codewords are stored in sectors in some other arrangement or order (e.g., sectors 408 a-408 d store codewords c*₀(x), c₁(x), c₂(x), and c₃(x), respectively). System 400 is merely one example.

The technique described above for the particular case of ν=1 is described below for cases where ν>1. The input data α_(ν)(x), α_(ν+1)(x), . . . , α_(m−1)(x) is systematically encoded with respect to g₁(x) to obtain the first level codewords for i=ν,ν+1, . . . , m−1: c _(i)(x)=ENC _(g1(x))(α_(i)(x))=x ^(R) ¹ α_(i)(x)+r _(i)(x), i=ν, ν+1, . . . , m−1.  (8)

Systematic encoding is then applied using g₂(x):

$\begin{matrix} {{{{\overset{\_}{c}}_{j}(x)} = {{{ENC}_{g\; 2{(x)}}\left( {{\sum\limits_{i = 0}^{\upsilon - 1}{\alpha^{ji}{a_{i}(x)}}} + {\sum\limits_{i = \upsilon}^{m - 1}{\alpha^{ji}{c_{i}(x)}}}} \right)} = {{x^{R_{2}}\left( {{\sum\limits_{i = 0}^{\upsilon - 1}{\alpha^{ji}{a_{i}(x)}}} + {\sum\limits_{i = \upsilon}^{m - 1}{\alpha^{ji}{c_{i}(x)}}}} \right)} + {s_{j}(x)}}}},} & (9) \end{matrix}$ to obtain the intermediate value c _(j)(x) for j=0, 1, 2, . . . , ν−1. In Equation 9, α is a scaling factor (i.e., constant) and does not “shift” any terms in a polynomial.

To obtain the second level codeword(s), the following equation is used: c* _(j)(x)

x ^(R) ² α_(j)(x)+r* _(j)(x), j=0,1,2, . . . , ν−1,  (10) where r*_(j)(x) are determined so that they satisfy the following constraint:

$\begin{matrix} {{{{\overset{\_}{c}}_{j}(x)} = {{x^{R_{2}}{\sum\limits_{i = \upsilon}^{m - 1}{\alpha^{ji}{c_{i}(x)}}}} + {\sum\limits_{i = 0}^{\upsilon - 1}{\alpha^{ji}{c_{i}^{*}(x)}}}}},{j = 0},1,2,\ldots\mspace{14mu},{\upsilon - 1},} & (11) \end{matrix}$ which yields the following system of equations:

$\begin{matrix} \left\{ \begin{matrix} {\sum\limits_{i = 0}^{\upsilon - 1}{c_{i}^{*}(x)}} & {= {{x^{R_{2}}{\sum\limits_{i = 0}^{\upsilon - 1}{a^{i}(x)}}} + {s_{0}(x)}}} \\ {\sum\limits_{i = 0}^{\upsilon - 1}{\alpha^{i}{c_{i}^{*}(x)}}} & {= {{x^{R_{2}}{\sum\limits_{i = 0}^{\upsilon - 1}{\alpha^{i}{a_{i}(x)}}}} + {s_{1}(x)}}} \\ {\sum\limits_{i = 0}^{\upsilon - 1}{\alpha^{2i}{c_{i}^{*}(x)}}} & {= {{x^{R_{2}}{\sum\limits_{i = 0}^{\upsilon - 1}{\alpha^{2i}{a_{i}(x)}}}} + {s_{2}(x)}}} \\ \; & \vdots \\ {\sum\limits_{i = 0}^{\upsilon - 1}{\alpha^{{({\upsilon - 1})}i}{c_{i}^{*}(x)}}} & {= {{x^{R_{2}}{\sum\limits_{i = 0}^{\upsilon - 1}{\alpha^{{({\upsilon - 1})}i}{a_{i}(x)}}}} + {s_{\upsilon - 1}(x)}}} \end{matrix} \right. & (12) \end{matrix}$ The above system of equations can be simplified by substituting Equation 10 as follows:

$\begin{matrix} \left\{ \begin{matrix} {\sum\limits_{i = 0}^{\upsilon - 1}{r_{i}^{*}(x)}} & {= {s_{0}(x)}} \\ {\sum\limits_{i = 0}^{\upsilon - 1}{\alpha^{i}{r_{i}^{*}(x)}}} & {= {s_{1}(x)}} \\ {\sum\limits_{i = 0}^{\upsilon - 1}{\alpha^{2i}{r_{i}^{*}(x)}}} & {= {s_{2}(x)}} \\ \; & \vdots \\ {\sum\limits_{i = 0}^{\upsilon - 1}{\alpha^{{({\upsilon - 1})}i}{r_{i}^{*}(x)}}} & {= {s_{\upsilon - 1}(x)}} \end{matrix} \right. & (13) \end{matrix}$ Therefore, the following explicit expression is obtained:

$\begin{matrix} {\begin{pmatrix} {r_{0}^{*}(x)} \\ {r_{1}^{*}(x)} \\ {r_{2}^{*}(x)} \\ \vdots \\ {r_{\upsilon - 1}^{*}(x)} \end{pmatrix} = {\begin{pmatrix} 1 & 1 & 1 & \ldots & 1 \\ 1 & \alpha & \alpha^{2} & \ldots & \alpha^{\upsilon - 1} \\ 1 & \alpha^{2} & \alpha^{4} & \ldots & \alpha^{2{({\upsilon - 1})}} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ 1 & \alpha^{\upsilon - 1} & \alpha^{2{({\upsilon - 1})}} & \ldots & \alpha^{{({\upsilon - 1})}^{2}} \end{pmatrix}^{- 1}\begin{pmatrix} {s_{0}(x)} \\ {s_{1}(x)} \\ {s_{2}(x)} \\ \vdots \\ {s_{\upsilon - 1}(x)} \end{pmatrix}}} & (14) \end{matrix}$ The degree of r*_(i)(x) are bounded by the degrees of s_(j)(x), j=0, 1, 2, . . . , ν−1. Thus, c*_(i)(x), i=0, 1, 2, . . . , ν−1, defined in Equation 10, are in systematic form.

It is next shown that c*₀, c*₁, . . . , c*_(ν−1)∈C₁. Recall that c _(j)(x), j=0, 1, 2, . . . , ν−1 and c_(i)(x), i=ν, ν+1, . . . , m−1 all divide into g₁(x), thus, Equation 11 can be interpreted as follows:

$\quad\left\{ \begin{matrix} {c_{0}^{*}(x)} & {+ {c_{1}^{*}(x)}} & {+ \ldots} & {+ {c_{\upsilon - 1}^{*}(x)}} & {= 0} & \left( {{mod}\;{g_{1}(x)}} \right) \\ {c_{0}^{*}(x)} & {+ {{\alpha c}_{1}^{*}(x)}} & {+ \ldots} & {{+ \alpha^{\upsilon - 1}}{c_{\upsilon - 1}^{*}(x)}} & {= 0} & \left( {{mod}\;{g_{1}(x)}} \right) \\ {c_{0}^{*}(x)} & {{+ \alpha^{2}}{c_{1}^{*}(x)}} & {+ \ldots} & {{+ \alpha^{2{({\upsilon - 1})}}}{c_{\upsilon - 1}^{*}(x)}} & {= 0} & \left( {{mod}\;{g_{1}(x)}} \right) \\ \; & \; & \; & \; & \vdots & \; \\ {c_{0}^{*}(x)} & {{+ \alpha^{\upsilon - 1}}{c_{1}^{*}(x)}} & {+ \ldots} & {{+ \alpha^{{({\upsilon - 1})}^{2}}}{c_{\upsilon - 1}^{*}(x)}} & {= 0} & \left( {{mod}\;{g_{1}(x)}} \right) \end{matrix} \right.$ which is equivalent to:

${\begin{pmatrix} 1 & 1 & 1 & \ldots & 1 \\ 1 & \alpha & \alpha^{2} & \ldots & \alpha^{\upsilon - 1} \\ 1 & \alpha^{2} & \alpha^{4} & \ldots & \alpha^{2{({\upsilon - 1})}} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ 1 & \alpha^{\upsilon - 1} & \alpha^{2{({\upsilon - 1})}} & \ldots & \alpha^{{({\upsilon - 1})}^{2}} \end{pmatrix}\begin{pmatrix} {c_{0}^{*}(x)} & \left( {{mod}\;{g_{1}(x)}} \right) \\ {c_{1}^{*}(x)} & \left( {{mod}\;{g_{1}(x)}} \right) \\ {c_{2}^{*}(x)} & \left( {{mod}\;{g_{1}(x)}} \right) \\ \vdots & \; \\ {c_{\upsilon - 1}^{*}(x)} & \left( {{mod}\;{g_{1}(x)}} \right) \end{pmatrix}} = {\begin{pmatrix} 0 \\ 0 \\ 0 \\ \vdots \\ 0 \end{pmatrix}.}$ Note the above matrix is a Vandermonde matrix and thus is non-singular. Therefore, c* _(j)(x)=0 (mod g ₁(x)), j=0,1,2, . . ., ν−1.  (15) It is thus concluded that c=[c*₀, . . . , c*_(ν−1), c*_(ν), . . . , c*_(m−1)] (following the construction of Equations 8, 10, and 14) is a desired codeword.

Next, Equations 9 and 14 are consolidated into one step. {tilde over (r)}_(j)(x), j=0, 1, . . . , ν−1 is the check polynomial of α_(j)(x) associated with g₂(x) and {tilde over (r)}_(j)(x), j=ν, ν+1, . . . , m−1 is the check polynomial of c_(j)(x) associated with g₁(x) (herein we use the same notation for brevity). The following equality results:

$\begin{matrix} {\begin{pmatrix} {s_{0}(x)} \\ {s_{1}(x)} \\ {s_{2}(x)} \\ \vdots \\ {s_{\upsilon - 1}(x)} \end{pmatrix} = {\begin{pmatrix} 1 & 1 & 1 & \ldots & 1 \\ 1 & \alpha & \alpha^{2} & \ldots & \alpha^{m - 1} \\ 1 & \alpha^{2} & \alpha^{4} & \ldots & \alpha^{2{({m - 1})}} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ 1 & \alpha^{\upsilon - 1} & \alpha^{2{({\upsilon - 1})}} & \ldots & \alpha^{{({\upsilon - 1})}{({m - 1})}} \end{pmatrix}^{- 1}\begin{pmatrix} {{\overset{\sim}{r}}_{0}(x)} \\ {{\overset{\sim}{r}}_{1}(x)} \\ {{\overset{\sim}{r}}_{2}(x)} \\ \vdots \\ {{\overset{\sim}{r}}_{m - 1}(x)} \end{pmatrix}}} & (16) \end{matrix}$ Combining Equations 14 and 16 results in:

$\begin{matrix} {\begin{pmatrix} {r_{0}^{*}(x)} \\ {r_{1}^{*}(x)} \\ {r_{2}^{*}(x)} \\ \vdots \\ {r_{\upsilon - 1}^{*}(x)} \end{pmatrix} = {\left( {I_{\upsilon}❘P} \right)\begin{pmatrix} {{\overset{\sim}{r}}_{0}(x)} \\ {{\overset{\sim}{r}}_{1}(x)} \\ {{\overset{\sim}{r}}_{2}(x)} \\ \vdots \\ {{\overset{\sim}{r}}_{m - 1}(x)} \end{pmatrix}}} & (17) \end{matrix}$ where I_(ν) denotes the ν×ν identity matrix and

$\begin{matrix} {{P = \begin{pmatrix} 1 & 1 & 1 & \ldots & 1 \\ 1 & \alpha & \alpha^{2} & \ldots & \alpha^{\upsilon - 1} \\ 1 & \alpha^{2} & \alpha^{4} & \ldots & \alpha^{2{({\upsilon - 1})}} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ 1 & \alpha^{\upsilon - 1} & \alpha^{2{({\upsilon - 1})}} & \ldots & \alpha^{{({\upsilon - 1})}^{2}} \end{pmatrix}^{- 1}}{\begin{pmatrix} 1 & 1 & \ldots & 1 \\ \alpha^{\upsilon} & \alpha^{\upsilon + 1} & \ldots & \alpha^{m - 1} \\ \alpha^{2\upsilon} & \alpha^{2{({\upsilon + 1})}} & \ldots & \alpha^{2{({m - 1})}} \\ \vdots & \vdots & \vdots & \vdots \\ \alpha^{{({\upsilon - 1})}\upsilon} & \alpha^{{({\upsilon - 1})}{({\upsilon + 1})}} & \ldots & \alpha^{{({\upsilon - 1})}{({m - 1})}} \end{pmatrix}.}} & (18) \end{matrix}$

Note that a linear combination of the check polynomial is equal to the check polynomial of the same linear combination of their corresponding data polynomials. Consequently, r*₀(x), r*₁(x), . . . , r*_(ν−1)(x), are produced by [r* ₀(x)r* ₁(x) . . . r* _(ν−1)(x)]^(T) =CHK _(g2(x))([I _(ν) P]·[α ₀(x) . . . α_(ν−)(x)c _(ν)(x) . . . c _(m−1)(x)]^(T))  (19) where CHK_(g(x)) denotes the check polynomial generator associated with generator polynomial g(x).

In summary, Equations 8 and 19 describe some embodiments of a new mapping method. Compared to some other mappings, the size and/or latency when implemented in hardware is more attractive compared to some other techniques.

From the above analysis, the integrated interleaving can be extended to cases where ν>1 using the following equations: [c _(ν)(x)c _(ν+1)(x) . . . c _(m−1)(x)]^(T) =ENC _(g1(x))(x ^(R) ² ^(−R) ¹ [α_(ν)(x)α_(ν+1)(x) . . . α_(m−1)(x)]^(T))  (20)

$\begin{matrix} {\left\lbrack {{c_{0}^{*}(x)}{c_{1}^{*}(x)}\mspace{14mu}\ldots\mspace{14mu}{c_{\upsilon - 1}^{*}(x)}} \right\rbrack^{T} = {{{ENC}_{g\; 2{(x)}}\left( {\left\lbrack {I_{\upsilon}P} \right\rbrack \cdot \left\lbrack {{a_{0}(x)}{a_{1}(x)}\mspace{14mu}\ldots\mspace{14mu}{a_{m - 1}(x)}} \right\rbrack^{T}} \right)} - {P \cdot \left\lbrack {{c_{\upsilon}(x)}{c_{\upsilon + 1}(x)}\mspace{14mu}\ldots\mspace{14mu}{c_{m - 1}(x)}} \right\rbrack^{T}}}} & (21) \end{matrix}$ where P is as defined in Equation 18. Equation 20 is used to generate the first level codewords c_(ν)(x), . . . , c_(m−1)(x) and Equation 21 is used to generate the second level codewords c*⁰(x), . . . , c*_(ν−1)(x).

FIG. 5 is a flowchart illustrating an embodiment for a two level integrated interleaved code where ν>1. In flowchart 500, input data α₀(x), α₁(x), . . . , α_(m−1)(x) is obtained at 502. At 504, first level codewords c_(ν)(x), . . . , c_(m−1)(x) are generated by performing systematic encoding using g₁(x) on input data α_(ν)(x), . . . , α_(m−1)(x), respectively. At 506, redundant data for second level codewords r*₀(x), r*₁(x), . . . , r*_(ν−1)(x) is generated by performing systematic encoding using g₂(x) on input data α₀(x), . . . , α_(ν−1)(x) and codewords c_(ν)(x), . . . , c_(m−1)(x). In Equation 19, the identity matrix, I_(ν), selects the appropriate pieces of input data and P applies scaling or weights as appropriate. Second level codewords c*₀(x), . . . , c*_(ν−1)(x) are generated at 508 by concatenating input data α₀(x), . . . , α_(ν−1)(x) and redundant data r*₀(x), . . . , r*_(ν−1)(x), respectively. At 510, first level codewords c_(ν)(x), . . . , c_(m−1)(x) and second level codewords c*₀(x), . . . , c*_(ν−1)(x) are output.

FIG. 6A shows an embodiment of a two level integrated interleaved encoder where m=4 and ν=2. Integrated interleaved encoder 600 includes systematic encoders 602 a-602 b which are configured to receive input data α₂(x) and α₃(x), respectively, and systematically encode that data using g₁(x). The outputs of systematic encoders 602 a-602 b are c₂(x) and c₃(x), respectively.

The first level codeword c₂(x) output by systematic encoder 602 a is passed to multiplier 604 and multiplier 606. Multiplier 604 multiplies c₂(x) by −α and multiplier 606 multiples it by (α+1).

The first level codeword c₃(x) output by systematic encoder 602 b is passed to multiplier 608 and multiplier 614. Multiplier 608 multiplies c₃(x) by −α(α+1) and multiplier 614 multiples it by (α²+α+1).

Adder 610 receives as input α₀(x), the output of multiplier 608, and the output of multiplier 604. Adder 612 receives as input α₁(x), the output of multiplier 606, and the output of multiplier 614. The sum output by adder 610 is passed to systematic encoder 616 a and is systematically encoded using g₂(x). The sum output by adder 612 is passed to systematic encoder 616 b and is systematically encoded using g₂(x).

Input data α₀(x) and α₁(x) are passed to multiplexers 618 a and 618 b, respectively, as input. The other input of multiplexer 618 a is the output of systematic encoder 616 a and the other input of multiplexer 618 b is the output of systematic encoder 616 b. In this particular embodiment, only the redundant data output by systematic encoders 616 a and 616 b are of interest. The select signals of multiplexers 618 a and 618 b (not shown) are configured to initially select input data α₀(x) and α₁(x), respectively. Then (at the appropriate time or bit/byte) the select signals of multiplexers 618 a and 618 b switch over and select the other input (i.e., redundant data output by systematic encoders 616 a and 616 b, respectively). The outputs of multiplexers 618 a and 618 b are second level codewords c*₀(x) and c*₁(x), respectively.

FIG. 6B is a flowchart illustrating an embodiment of a process for a two level integrated interleaved encoder where m=4 and ν=2. Process 650 in FIG. 6B corresponds to system 600 shown in FIG. 6A. At 652, input data α₀(x), α₁(x), α₂(x), and α₃(x) are obtained. First level codewords c₂(x) and c₃(x) are generated by performing systematic encoding using g₁(x) on input data α₂(x) and α₃(x), respectively at 654. At 656, c₂(x) is multiplied by −α and at 658, c₂(x) is multiplied by (α+1). At 660, c₃(x) is multiplied by −α(α+1) and at 662, c₃(x) is multiplied by (α²+α+1). At 664, α₀(x), −α(α+1)c₃(x), and −αc₂(x) are added to obtain a first sum. At 666, α₁(x), (α+1)c₂(x), and (α²+α+1)c₃(x) are added to obtain a second sum. At 668, the first sum is systematically encoded using g₂(x) to obtain a first piece of redundant data which is concatenated to α₀(x) to obtain c*₀(x). At 670, the second sum is systematically encoded using g₂(x) to obtain a second piece of redundant data which is concatenated to α₁(x) to obtain c*¹(x). The first level codewords c₂(x) and c₃(x) and the second level codewords c*₀(x) and c*₁(x) are output at 672.

Although some of the examples described above are for the two level case, the techniques can be applied to three or more levels. The following figure shows some three level examples.

FIG. 7 is a diagram showing two embodiments of three level integrated interleaved encoding. For clarity, some components (e.g., adders and/or multipliers) are not shown. In the first embodiment (700) m=4. There is one second level codeword (i.e., ν_(2nd level)=1) and there is one third level codeword (i.e., ν_(3rd level)=1). In this example, a single asterisk (i.e., “*”) indicates or corresponds to a second level and two asterisks (i.e., “**”) indicates or corresponds to a third level. Second level codeword c*₁(x) is based on its corresponding piece of input data, α₁(x), as well as some or all of the first level codewords c₂(x) and c₃(x) (e.g., just the redundant data or the entire codeword). Third level codeword c**₀(x) is based on its corresponding piece of input data, α₀(x), as well as some or all of second level codeword c*₁(x) (e.g., just the redundant data or the entire codeword).

The second embodiment (702) is also for the case m=4. In this embodiment there is one codeword at the first level, two codewords at the second level, and one codeword at the third level. Second level codewords c*₂(x) and c*₁(x) are each based on their respective piece of input data (i.e., α₂(x) and α₁(x)) and some or all of the first level codeword c₃(x). The third level codeword c**₀(x) is based on the input data α₀(x) and some or all of second level codewords c*₂(x) and c*₁(x).

Although the foregoing embodiments have been described in some detail for purposes of clarity of understanding, the invention is not limited to the details provided. There are many alternative ways of implementing the invention. The disclosed embodiments are illustrative and not restrictive. 

1. A method for performing integrated interleaved encoding, comprising: obtaining a first piece of input data and a second piece of input data; systematically encoding the first piece of input data using a first generator polynomial to obtain a first codeword; using a processor to generate a second codeword based at least in part on the second piece of input data and the first codeword, including by systematically encoding information based at least in part on the second piece of input data and the first codeword using a second generator polynomial; and outputting the first codeword and the second codeword.
 2. The method of claim 1, wherein first codeword is associated with a first level and the second codeword is associated a second level.
 3. The method of claim 2, wherein the second codeword is the only codeword associated with the second level.
 4. The method of claim 2, wherein there is a third codeword associated with a third level.
 5. The method of claim 2, wherein there is a third codeword associated with a first level.
 6. The method of claim 2, wherein there is a third codeword associated with a second level.
 7. The method of claim 1, wherein the second codeword includes the second piece of input data followed by redundant data generated by the systematic encoding process that uses the second generator polynomial.
 8. The method of claim 1, wherein generating the second codeword includes using a ν×ν identity matrix, I_(ν).
 9. The method of claim 1, wherein generating the second codeword includes weighting.
 10. The method of claim 9, wherein weighting includes using $\begin{matrix} {{P = \begin{pmatrix} 1 & 1 & 1 & \ldots & 1 \\ 1 & \alpha & \alpha^{2} & \ldots & \alpha^{\upsilon - 1} \\ 1 & \alpha^{2} & \alpha^{4} & \ldots & \alpha^{2{({\upsilon - 1})}} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ 1 & \alpha^{\upsilon - 1} & \alpha^{2{({\upsilon - 1})}} & \ldots & \alpha^{{({\upsilon - 1})}^{2}} \end{pmatrix}^{- 1}}{\begin{pmatrix} 1 & 1 & \ldots & 1 \\ \alpha^{\upsilon} & \alpha^{\upsilon + 1} & \ldots & \alpha^{m - 1} \\ \alpha^{2\upsilon} & \alpha^{2{({\upsilon + 1})}} & \ldots & \alpha^{2{({m - 1})}} \\ \vdots & \vdots & \vdots & \vdots \\ \alpha^{{({\upsilon - 1})}\upsilon} & \alpha^{{({\upsilon - 1})}{({\upsilon + 1})}} & \ldots & \alpha^{{({\upsilon - 1})}{({m - 1})}} \end{pmatrix}.}} & \; \end{matrix}$
 11. The method of claim 1, wherein generating the second codeword includes adding.
 12. The method of claim 11, wherein adding includes adding the first codeword and the second piece of data.
 13. The method of claim 1, wherein generating the second codeword includes multiplying.
 14. The method of claim 13, wherein multiplying includes using (α²+α+1).
 15. The method of claim 1 further comprising: obtaining a third piece of input data; and systematically encoding the third piece of input data using a first generator polynomial to obtain a third codeword, wherein the first codeword and the third codeword are associated with a same level and generating the second codeword is further based at least in part on the third codeword.
 16. The method of claim 15 further comprising: obtaining a fourth piece of input data; and generating a fourth codeword based at least in part on the fourth piece of input data, the first codeword, and the third codeword, including by systematically encoding using a second generator polynomial, wherein the second codeword and fourth third codeword are associated with a same level.
 17. The method of claim 1 further comprising storing the first codeword and the second codeword that are output.
 18. The method of claim 17, wherein storing includes storing on a disk.
 19. The method of claim 1 further comprising transmitting the first codeword and the second codeword that are output.
 20. The method of claim 19, wherein transmitting includes transmitting over a wireless medium.
 21. The method of claim 1, wherein: the first generator polynomial is associated with a first minimum distance, d₁; the second generator polynomial is associated with a second minimum distance, d₂; and d₂≧d₁.
 22. A system for performing integrated interleaved encoding, comprising: an input interface configured to obtain a first piece of input data and a second piece of input data; an encoder configured to systematically encode the first piece of input data using a first generator polynomial to obtain a first codeword; a codeword generator configured to generate a second codeword based at least in part on the second piece of input data and the first codeword, including by systematically encoding information based at least in part on the second piece of input data and the first codeword using a second generator polynomial; and an output interface configured to output the first codeword and the second codeword.
 23. A computer program product for performing integrated interleaved encoding, the computer program product being embodied in a tangible computer readable storage medium and comprising computer instructions for: obtaining a first piece of input data and a second piece of input data; systematically encoding the first piece of input data using a first generator polynomial to obtain a first codeword; generating a second codeword based at least in part on the second piece of input data and the first codeword, including by systematically encoding information based at least in part on the second piece of input data and the first codeword using a second generator polynomial; and outputting the first codeword and the second codeword. 